package com.briup.pts.service.impl;

import com.briup.pts.domain.po.AnalysisPo;
import com.briup.pts.mapper.AnalysisMapper;
import com.briup.pts.service.AnalysisService;
import org.springframework.util.CollectionUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @author wy
 * @description
 * @data 2024/11/29  11:36
 */
@Service
@RequiredArgsConstructor
public class AnalysisServiceImpl implements AnalysisService {
    private final AnalysisMapper mapper;

    @Override
    public Map<String, List<?>> count() {
        List<AnalysisPo> list = mapper.count();
        List<String> names = new ArrayList<>();
        List<Integer> values = new ArrayList<>();
        //遍历list集合将数据分别写入到两个集合里
        list.forEach(po -> {
            names.add(po.getName());
            values.add(po.getValue());
        });
        return Map.of("name", names, "value", values);

    }

    @Override
    public Map<String, Integer> indexCount() {
        // 获取数据
        List<AnalysisPo> analysisPos = mapper.indexCount();
        /*
        analysisPo ==> name 和 value
        name 就是 Map 集合的key
        value 就是Map 集合的value值
         */
        HashMap<String, Integer> map = new HashMap<>();
        for (AnalysisPo po : analysisPos) {
            map.put(po.getName(), po.getValue());
        }
        return map;

    }

    @Override
    public Map<String, Integer> countDisease() {

        List<AnalysisPo> analysisPos = mapper.countDisease();
        HashMap<String, Integer> map = new HashMap<>();
        for (AnalysisPo po : analysisPos) {
            map.put(po.getName(), po.getValue());
        }
        return map;
    }

    @Override
    public Map<String, List<?>> countSales() {
        // 统计本年度销售数据状况
        List<AnalysisPo> list = mapper.countSales();
        // 处理数据
        // name集合的数据
        List<String> names = List.of("1月", "2月", "3月", "4月", "5月",
                "6月", "7月", "8月", "9月", "10月", "11月", "12月");
        // values集合的数据，预先设置12个为0的默认值参数
        List<Integer> values =
                new ArrayList<>(Collections.nCopies(12, 0));
        // 当数据库查询结果list集合不为空时，按照月份将数据重新设置
        if (!CollectionUtils.isEmpty(list)) {
            // 遍历集合
            for (int i = 0, j = 0; i < 12 && j < list.size(); i++) {
                // 从list集合中获取元素对象
                AnalysisPo po = list.get(j);
                // 比较po的月份和values集合下标，如果相差1，
                // 那么就将po的value放入到values集合中的对应位置内
                if (i + 1 == Integer.parseInt(po.getName())) {
                    values.set(i, po.getValue());
                    j++;
                }
            }
        }
        return Map.of("name", names, "value", values);
    }

    private Map<String, Integer> list2Map(List<AnalysisPo> list) {
        HashMap<String, Integer> map = new HashMap<>();
        for (AnalysisPo po : list) {
            map.put(po.getName(), po.getValue());
        }
        return map;
    }
}
